<?php
/**
 * Created by PhpStorm.
 * Author: ljz
 * Date: 2023/5/18
 * Time: 19:00
 */

namespace App\backend\models;


use App\common\models\BaseModel;
use Illuminate\Support\Facades\DB;

/**
 * Class OrderModel
 * @package app\common\models
 */
class GoodsModel extends BaseModel
{
    // 表名
    const table = 'goods';
    // 状态
    const del_status = 7;

    public function __construct() {

    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function list_rules()
    {
        return [];
    }

    /**
     * 查询字段规则
     *
     * @return array
     */

    static public function rules()
    {
        return [
            'type' => 'required|integer', // 商品类型：1实体 2虚拟 3电子
        ];
    }

    /**
     * 添加/编辑 商品基础信息 字段规则
     *
     * @return array
     */
    static public function modify_base_rules()
    {
        return [
            'type' => 'required|integer', // 商品类型：1实体 2虚拟 3电子
            'title' => 'required|string|max:255', // 商品名称
            'subtitle' => 'required|string|max:255', // 副标题
            'short_title' => 'required|string|max:255', // 短标题
            'title_tag' => 'required|string|max:30', // 标题标签
            'thumb_url' => 'required', // 商品图片
            'video_url' => 'required', // 首图视频
            'thumb' => 'required', // 封面图
            'keywords' => 'required', // 关键词
            'tag_ids' => 'required', // 商品特征标签
            'categorys' => 'required', // 商品分类
            'group' => 'required', // 商品分组
            'is_support' => 'required', // 商品支持
            'city_id' => 'required', // 城市ID
            'province' => 'required', // 省
            'city' => 'required', // 市
            'region' => 'required', // 区
        ];
    }

    /**
     * 添加/编辑 商品价格/库存信息 字段规则
     *
     * @return array
     */
    static public function modify_price_stock_rules()
    {
        return [
            'goods_id' => 'required|int', // 商品ID
            'price' => 'required', // 售卖价格
            'cost_price' => 'required', // 成本价
            'stock' => 'required', // 商品库存
            'stock_forewarn' => 'required', // 库存预警
            'show_sales' => 'required', // 虚拟销量
            'detail_show_stock_status' => 'required', // 商品详情显示库存：1：隐藏，0：显示
            'detail_show_sales_status' => 'required', // 商品详情显示销量：1：隐藏，0：显示
        ];
    }

    /**
     * 添加/编辑 商品附加规格信息 字段规则
     *
     * @return array
     */
    static public function modify_sku_info_rules()
    {
        return [
            'sku_id' => 'required|int', // sku_id
        ];
    }

    /**
     * 添加/编辑 商品详情 字段规则
     *
     * @return array
     */
    static public function modify_description_rules()
    {
        return [
            'description' => 'required|string', // 商品详情
        ];
    }

    /**
     * 添加/编辑 商品物流设置 字段规则
     *
     * @return array
     */
    static public function modify_logistics_rules()
    {
        return [
            'goods_id' => 'required|int', // 商品ID
            'is_logistics' => 'required|int', // 物流支持 0:上门自提,1:快递发货
            'self_pickup_point' => 'required|int', // 自提点 0:全部自提点,1:部分自提点
            'weight' => 'required', //重量
            'volume' => 'required', //体积
        ];
    }

    /**
     * 添加/编辑 商品参数 字段规则
     *
     * @return array
     */
    static public function modify_params_rules()
    {
        return [
            'goods_id' => 'required|int', // 商品ID
            'params_name' => 'required|string', // 参数名称
            'params_type' => 'required|int', // 类型,0:不启用,1:上传图片,2:富文本
        ];
    }

    /**
     * 添加/编辑 商品参数 字段规则
     *
     * @return array
     */
    static public function modify_state_rules()
    {
        return [
            'status' => 'required|int', // 商品状态
        ];
    }

    /**
     * 添加/编辑 商品限购 字段规则
     *
     * @return array
     */
    static public function modify_quota_rules()
    {
        return [
            'quota_status' => 'required|int', // 是否限购 0：不限购，1:限购
            'forerver_quota_status' => 'required|int', // 是否永久限购 0：否，1：是
            'cycle_quota_status' => 'required|int', // 是否周期限购 0：否，1：是
            'customize_status' => 'required|int', // 是否自定义限购 0：否，1：是
            'browse_right_status' => 'required|int', // 浏览权限 0：全部用户
        ];
    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function update_rules()
    {
        return [
            'goods_id' => 'required|int', // 商品ID
            'status' => 'required|int', // 商品状态
        ];
    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function info_rules()
    {
        return [
            'goods_id' => 'required|int', // 商品ID
        ];
    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function restore_rules()
    {
        return [
            'goods_id' => 'required|int', // 商品ID
        ];
    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function delete_rules()
    {
        return [
            'goods_id' => 'required|int', // 商品ID
        ];
    }

    /**
     * 字段验证返回错误信息
     *
     * @return array
     */
    static public function message()
    {
        return [
            'goods_id.required' => '商品ID不能为空',
            'goods_id.int' => '商品ID数据类型有误',
            'status.required' => '商品状态不能为空',
            'status.int' => '商品状态数据类型有误',
            'type.required' => '商品类型不能为空',
            'type.integer' => '商品类型数据类型有误',
            'title.required' => '商品名称不能为空',
            'title.string' => '商品名称数据类型有误',
            'title.max' => '商品名称长度超过最大限制',
            'subtitle.required' => '副标题不能为空',
            'subtitle.string' => '副标题数据类型有误',
            'subtitle.max' => '副标题长度超过最大限制',
            'short_title.required' => '短标题不能为空',
            'short_title.string' => '短标题数据类型有误',
            'short_title.max' => '短标题长度超过最大限制',
            'title_tag.required' => '短标题不能为空',
            'title_tag.string' => '短标题数据类型有误',
            'title_tag.max' => '短标题长度超过最大限制',
            'thumb_url.required' => '商品图片不能为空',
            'video_url.required' => '首图视频不能为空',
            'thumb.required' => '封面图不能为空',
            'keywords.required' => '关键词不能为空',
            'tag_ids.required' => '商品特征标签不能为空',
            'categorys.required' => '商品分类不能为空',
            'group.required' => '商品分组不能为空',
            'is_support.required' => '商品支持不能为空',
            'city_id.required' => '城市ID不能为空',
            'province.required' => '省名不能为空',
            'city.required' => '市名不能为空',
            'region.required' => '城市区域不能为空',
            'price.required' => '售卖价格不能为空',
            'cost_price.required' => '成本价不能为空',
            'stock.required' => '商品库存不能为空',
            'stock_forewarn.required' => '库存预警不能为空',
            'show_sales.required' => '虚拟销量不能为空',
            'detail_show_stock_status.required' => '商品详情显示库存不能为空',
            'detail_show_sales_status.required' => '商品详情显示销量不能为空',
            'sku_id.required' => '附加规格ID不能为空',
            'description.required' => '商品详情不能为空',
            'params_name.required' => '参数名称不能为空',
            'params_type.required' => '参数类型不能为空',
            'is_logistics.required' => '物流支持不能为空',
            'self_pickup_point.required' => '自提点不能为空',
            'weight.required' => '重量不能为空',
            'volume.required' => '体积不能为空',
            'quota_status.required' => '是否限购不能为空',
            'forerver_quota_status.required' => '是否永久限购不能为空',
            'cycle_quota_status.required' => '是否周期限购不能为空',
            'customize_status.required' => '是否自定义限购不能为空',
            'browse_right_status.required' => '浏览权限不能为空',
        ];
    }

    /**
     * 数据库 - 商品统计数量
     *
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function goodsNumData($where_data)
    {
        $count = DB::table(self::table)
            ->where($where_data)
            ->count();

        return $count;
    }

    /**
     * 数据库 - 商户信息
     *
     * @param $select array //查询字段 参数数组
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function selectStoreData($select, $where_data)
    {
        $data = DB::table('store')->select($select)->where($where_data)->value('store_name');
        return $data;
    }

    /**
     * 数据库 - 查询商品列表
     * @param $page string //分页页数
     * @param $limit string //分页条数
     * @param $where_data array //查询条件 参数数组
     * @param $where_in_data array //in 查询条件 参数数组
     * @param $select array //select 查询参数
     * @return array
     */
    static public function listed($page, $limit, $where_data = [], $where_in_data = [], $select = ['*'])
    {
        $query = DB::table(self::table)
            ->select($select)
            ->where('status', '<',self::del_status)
            ->where($where_data);

        if (!empty($where_in_data)) {
            $query->whereIn('id', $where_in_data);
        }

        $data = $query->apiPaginate($limit, ['*'], 'page', $page)->toArray();
        return $data;
    }

    /**
     * 数据库 - 左联 - 查询商品列表
     * @param $page string //分页页数
     * @param $limit string //分页条数
     * @param $where_data array //查询条件 参数数组
     * @param $where_in_data array //in 查询条件 参数数组
     * @param $select array //select 查询参数
     * @return array
     */
    static public function left_join_listed($page, $limit, $where_data = [], $where_in_data = [], $select = ['*'])
    {
        $query = DB::table(self::table)
            ->leftJoin('store', 'store.id', '=', 'goods.store_id')
            ->select($select)
            ->where('status', '<',self::del_status)
            ->where($where_data);

        if (!empty($where_in_data)) {
            $query->whereIn('id', $where_in_data);
        }

        $data = $query->apiPaginate($limit, ['*'], 'page', $page)->toArray();
        return $data;
    }

    /**
     * 数据库 - 查询商品详情
     * @param $where_data array //查询条件 参数数组
     * @param $select array //查询条件 参数数组
     * @return array
     */
    static public function info($where_data = [], $select = [])
    {
        $data = DB::table(self::table)->select($select)->where($where_data)->first();
        return $data;
    }

    /**
     * 数据库 - 查询 商品所有设置详情
     * @param $where_data array //查询条件 参数数组
     * @param $select array //查询条件 参数数组
     * @return array
     */
    static public function detail_info($where_data = [], $select = [])
    {
        $data = DB::table(self::table)
            ->leftJoin('goods_cron_time', 'goods.id', '=', 'goods_cron_time.goods_id')
            ->leftJoin('goods_quota', 'goods.id', '=', 'goods_quota.goods_id')
            ->select($select)
            ->where($where_data)
            ->first();

        return $data;
    }

    /**
     * 数据库 - 查询商品回收站列表
     * @param $page string //分页页数
     * @param $limit string //分页条数
     * @param $where_in_data array //in 查询条件 参数数组
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function depot_listed($page, $limit, $where_data = [], $where_in_data = [])
    {
        $query = DB::table(self::table)
            ->select('id', 'title', 'thumb', 'thumb_url', 'type', 'price', 'stock', 'real_sales', 'created_at', 'deleted_at')
            ->where('status', '>=',self::del_status)
            ->where($where_data);

        if (!empty($where_in_data)) {
            $query->whereIn('id', $where_in_data);
        }

        $data = $query->apiPaginate($limit, ['*'], 'page', $page)->toArray();
        return $data;
    }

    /**
     * 数据库 - 删除/下架商品
     *
     * @param $where_data array //查询条件 参数数组
     * @param $update_data array //更新 参数数组
     * @return array
     */
    static public function updateds($where_data, $update_data)
    {
        $data = DB::table(self::table)
            ->where($where_data)
            ->update($update_data);

        return $data;
    }

    /**
     * 数据库 - 更新数据
     * @param $where_data   //商品ID
     * @param $data //参数数组
     * @return array
     */
    static public function updatedData($where_data, $data)
    {
        $data = DB::table(self::table)->where($where_data)->update($data);
        return $data;
    }

    /**
     * 数据库 - 插入数据
     * @param $data //参数数组
     * @return array
     */
    static public function insertData($data)
    {
        $data = DB::table(self::table)->insert($data);
        return $data;
    }

    /**
     * 数据库 - 插入数据 返回ID
     * @param $data //参数数组
     * @return array
     */
    static public function insertGetIdData($data)
    {
        $data = DB::table(self::table)->insertGetId($data);
        return $data;
    }

}
